iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0

聽到 BERT,大家第一個聯想到的是什麼呢?
是他嗎??

bert

還是這個

bert2

加上

這個?
google

答案應該比較接近後者 XD 沒錯,BERT 就是 Google 所開發的模型,全稱為 Bidirectional Encoder Representations from Transformers,為 NLP 預訓練的技術,且在許多 NLP 深度學習的領域大獲成功。接下來,就讓我們來好好了解 BERT 吧!

什麼是 BERT?

BERT 是一種基於變換器(transformers)的編碼器(encoder),它旨在通過上下文的各種調節,以非監督式的方式預先訓練未標記文字(僅使用純文字語料庫)的深度雙向標記法。這邊的雙向(bidirectional)和 BiLSTM 的雙向原理基本上一樣,就是同時由 input 的前至後與後至前進行編碼。而所謂的標記,就是將純文字轉換為電腦理解的字詞向量(word vector),成為詞嵌入(word embedding),把字詞所帶有之特徵(word vector)組合起來映射到不同維度的方式。
例如我們將每個字詞進行編碼產生 word vector:

  • 我 --> [1, 0, 0, 0, 0]
  • 要 --> [0, 1, 0, 0, 0]
  • 去 --> [0, 0, 1, 0, 0]
  • 台北 --> [0, 0, 0, 1, 0]
  • 台中 --> [0, 0, 0, 0, 1]

那麽當他們組合成一句話時就會變成矩陣(matrix)

  • 我要去台北 -->
    [[1, 0, 0, 0, 0],
    [0, 1, 0, 0, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 0, 1, 0]]

  • 我要去台中 -->
    [[1, 0, 0, 0, 0],
    [0, 1, 0, 0, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 0, 0, 1]]

而因為 BERT 在進行編碼標記時是考慮到雙向的,較不會產生同一個字,在不同語境(context)裡產生的歧異問題。例如維基百科中的例子:

  • 植物需要吸收「水分」
  • 財務報表裡有「水分」

其中,「水分」乍看之下是相同的詞,只是在不同的 context 裡面是不同的意思,這種時候不考慮上下文進行編碼的 word2vec 這種模型就完全無法分辨,兩個「水分」的 word vector 都一樣,會產生歧異。BERT 因為考慮上下文進行編碼,故植物之於「水分」和財務報表之於「水分」的 word vector 肯定不一樣,這樣一來就不容易產生歧異了。

BERT 如何做訓練?

在解決 NLP 任務,訓練模型時主要可以分為以下兩個步驟:

  1. 在大型未標記的文字語料庫(非監督或半監督式學習)上訓練語言模型
  2. 根據特定的 NLP 任務微調此大型模型,以利用此模型獲得的大型知識庫

也就是 BERT 訓練的兩大步驟:Pre-training 與 Fine-Tuning

pre

圖片來源

由上述內容可知,進行 Pre- training 時一定要有足夠的語料,模型的訓練才會足夠全面,而 context 對於 BERT 來說又是非常非常重要的判斷依據,故 BERT 模型都在非常大型的語料庫上預先訓練( Google 以 BooksCorpus 上 800M 個詞與英文維基百科 2500M 個詞進行 Pre-training)。很明顯,此訓練量像我們這種「一般人」根本不可能做得到。還好,Google 開源了多個版本多個語言的 pre-trained 模型給大家使用,所以現在這些模型我們都能在 Github 取得。而具體版本如下:

  • BERT-Large, Uncased(Whole Word Masking)
    語言種類:英文
    網路結構:24-layer,1024-hidden,16-heads
    參數規模:340M

  • BERT-Large, Cased(Whole Word Masking)
    語言種類:英文
    網路結構:24-layer,1024-hidden,16-heads
    參數規模:340M

  • BERT-Base, Uncased
    語言種類:英文
    網路結構:12-layer,768-hidden,12-heads
    參數規模:110M

  • BERT-Large, Uncased
    語言種類:英文
    網路結構:24-layer,1024-hidden,16-heads
    參數規模:340M

  • BERT-Base, Cased
    語言種類:英文
    網路結構:12-layer,768-hidden,12-heads
    參數規模:110M

  • BERT-Large, Cased
    語言種類:英文
    網路結構:24-layer,1024-hidden,16-heads
    參數規模:340M

  • BERT-Base, Multilingual Cased
    語言種類:104種語言
    網路結構:12-layer,768-hidden,12-heads
    參數規模:110M

  • BERT-Base, Multilingual Uncased
    語言種類:102種語言
    網路結構:12-layer,768-hidden,12-heads
    參數規模:110M

  • BERT-Base, Chinese
    語言種類:中文
    網路結構:12-layer,768-hidden,12-heads
    參數規模:110M

上述版本可知,語言主要分為中文、英文和多語言。 其中英文和多語言版本還區分大小寫(cased:區分,uncased:不區分)。網路結構分為 Base 和 Large,主要從參數規模可以看出 Base 和 Large 的區別。Base 參數規模為110M,Large 則是 340M(詳細區別與架構如下圖所示)。 中文的預訓練模型只有一個版本,Base 版本的網路結構。

  • BERT Base:12 層變壓器區塊(transformer blocks),12 個 attention heads,110M 個參數
  • BERT Large:24 層變壓器區塊(transformer blocks),16 個 attention heads,340M 個參數

version

圖片來源

今天就先講解到這邊~明天再慢慢解釋 BERT 的 pre-training 流程,包括什麼是 mask、attention 等等,那麼,明天見!


上一篇
Day 27 雙向長短記憶網路(Bi-directional Long Short-Term Memory, BiLSTM)
下一篇
Day 29 NLP 的重要模型 —— BERT 的時代 中篇
系列文
語言學與NLP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言